YES(O(1),O(n^1)) We are left with following problem, upon which TcT provides the certificate YES(O(1),O(n^1)). Strict Trs: { append(@l1, @l2) -> append#1(@l1, @l2) , append#1(::(@x, @xs), @l2) -> ::(@x, append(@xs, @l2)) , append#1(nil(), @l2) -> @l2 , appendAll(@l) -> appendAll#1(@l) , appendAll#1(::(@l1, @ls)) -> append(@l1, appendAll(@ls)) , appendAll#1(nil()) -> nil() , appendAll2(@l) -> appendAll2#1(@l) , appendAll2#1(::(@l1, @ls)) -> append(appendAll(@l1), appendAll2(@ls)) , appendAll2#1(nil()) -> nil() , appendAll3(@l) -> appendAll3#1(@l) , appendAll3#1(::(@l1, @ls)) -> append(appendAll2(@l1), appendAll3(@ls)) , appendAll3#1(nil()) -> nil() } Obligation: innermost runtime complexity Answer: YES(O(1),O(n^1)) We add following dependency tuples: Strict DPs: { append^#(@l1, @l2) -> c_1(append#1^#(@l1, @l2)) , append#1^#(::(@x, @xs), @l2) -> c_2(append^#(@xs, @l2)) , append#1^#(nil(), @l2) -> c_3() , appendAll^#(@l) -> c_4(appendAll#1^#(@l)) , appendAll#1^#(::(@l1, @ls)) -> c_5(append^#(@l1, appendAll(@ls)), appendAll^#(@ls)) , appendAll#1^#(nil()) -> c_6() , appendAll2^#(@l) -> c_7(appendAll2#1^#(@l)) , appendAll2#1^#(::(@l1, @ls)) -> c_8(append^#(appendAll(@l1), appendAll2(@ls)), appendAll^#(@l1), appendAll2^#(@ls)) , appendAll2#1^#(nil()) -> c_9() , appendAll3^#(@l) -> c_10(appendAll3#1^#(@l)) , appendAll3#1^#(::(@l1, @ls)) -> c_11(append^#(appendAll2(@l1), appendAll3(@ls)), appendAll2^#(@l1), appendAll3^#(@ls)) , appendAll3#1^#(nil()) -> c_12() } and mark the set of starting terms. We are left with following problem, upon which TcT provides the certificate YES(O(1),O(n^1)). Strict DPs: { append^#(@l1, @l2) -> c_1(append#1^#(@l1, @l2)) , append#1^#(::(@x, @xs), @l2) -> c_2(append^#(@xs, @l2)) , append#1^#(nil(), @l2) -> c_3() , appendAll^#(@l) -> c_4(appendAll#1^#(@l)) , appendAll#1^#(::(@l1, @ls)) -> c_5(append^#(@l1, appendAll(@ls)), appendAll^#(@ls)) , appendAll#1^#(nil()) -> c_6() , appendAll2^#(@l) -> c_7(appendAll2#1^#(@l)) , appendAll2#1^#(::(@l1, @ls)) -> c_8(append^#(appendAll(@l1), appendAll2(@ls)), appendAll^#(@l1), appendAll2^#(@ls)) , appendAll2#1^#(nil()) -> c_9() , appendAll3^#(@l) -> c_10(appendAll3#1^#(@l)) , appendAll3#1^#(::(@l1, @ls)) -> c_11(append^#(appendAll2(@l1), appendAll3(@ls)), appendAll2^#(@l1), appendAll3^#(@ls)) , appendAll3#1^#(nil()) -> c_12() } Weak Trs: { append(@l1, @l2) -> append#1(@l1, @l2) , append#1(::(@x, @xs), @l2) -> ::(@x, append(@xs, @l2)) , append#1(nil(), @l2) -> @l2 , appendAll(@l) -> appendAll#1(@l) , appendAll#1(::(@l1, @ls)) -> append(@l1, appendAll(@ls)) , appendAll#1(nil()) -> nil() , appendAll2(@l) -> appendAll2#1(@l) , appendAll2#1(::(@l1, @ls)) -> append(appendAll(@l1), appendAll2(@ls)) , appendAll2#1(nil()) -> nil() , appendAll3(@l) -> appendAll3#1(@l) , appendAll3#1(::(@l1, @ls)) -> append(appendAll2(@l1), appendAll3(@ls)) , appendAll3#1(nil()) -> nil() } Obligation: innermost runtime complexity Answer: YES(O(1),O(n^1)) We estimate the number of application of {3,6,9,12} by applications of Pre({3,6,9,12}) = {1,4,7,10}. Here rules are labeled as follows: DPs: { 1: append^#(@l1, @l2) -> c_1(append#1^#(@l1, @l2)) , 2: append#1^#(::(@x, @xs), @l2) -> c_2(append^#(@xs, @l2)) , 3: append#1^#(nil(), @l2) -> c_3() , 4: appendAll^#(@l) -> c_4(appendAll#1^#(@l)) , 5: appendAll#1^#(::(@l1, @ls)) -> c_5(append^#(@l1, appendAll(@ls)), appendAll^#(@ls)) , 6: appendAll#1^#(nil()) -> c_6() , 7: appendAll2^#(@l) -> c_7(appendAll2#1^#(@l)) , 8: appendAll2#1^#(::(@l1, @ls)) -> c_8(append^#(appendAll(@l1), appendAll2(@ls)), appendAll^#(@l1), appendAll2^#(@ls)) , 9: appendAll2#1^#(nil()) -> c_9() , 10: appendAll3^#(@l) -> c_10(appendAll3#1^#(@l)) , 11: appendAll3#1^#(::(@l1, @ls)) -> c_11(append^#(appendAll2(@l1), appendAll3(@ls)), appendAll2^#(@l1), appendAll3^#(@ls)) , 12: appendAll3#1^#(nil()) -> c_12() } We are left with following problem, upon which TcT provides the certificate YES(O(1),O(n^1)). Strict DPs: { append^#(@l1, @l2) -> c_1(append#1^#(@l1, @l2)) , append#1^#(::(@x, @xs), @l2) -> c_2(append^#(@xs, @l2)) , appendAll^#(@l) -> c_4(appendAll#1^#(@l)) , appendAll#1^#(::(@l1, @ls)) -> c_5(append^#(@l1, appendAll(@ls)), appendAll^#(@ls)) , appendAll2^#(@l) -> c_7(appendAll2#1^#(@l)) , appendAll2#1^#(::(@l1, @ls)) -> c_8(append^#(appendAll(@l1), appendAll2(@ls)), appendAll^#(@l1), appendAll2^#(@ls)) , appendAll3^#(@l) -> c_10(appendAll3#1^#(@l)) , appendAll3#1^#(::(@l1, @ls)) -> c_11(append^#(appendAll2(@l1), appendAll3(@ls)), appendAll2^#(@l1), appendAll3^#(@ls)) } Weak DPs: { append#1^#(nil(), @l2) -> c_3() , appendAll#1^#(nil()) -> c_6() , appendAll2#1^#(nil()) -> c_9() , appendAll3#1^#(nil()) -> c_12() } Weak Trs: { append(@l1, @l2) -> append#1(@l1, @l2) , append#1(::(@x, @xs), @l2) -> ::(@x, append(@xs, @l2)) , append#1(nil(), @l2) -> @l2 , appendAll(@l) -> appendAll#1(@l) , appendAll#1(::(@l1, @ls)) -> append(@l1, appendAll(@ls)) , appendAll#1(nil()) -> nil() , appendAll2(@l) -> appendAll2#1(@l) , appendAll2#1(::(@l1, @ls)) -> append(appendAll(@l1), appendAll2(@ls)) , appendAll2#1(nil()) -> nil() , appendAll3(@l) -> appendAll3#1(@l) , appendAll3#1(::(@l1, @ls)) -> append(appendAll2(@l1), appendAll3(@ls)) , appendAll3#1(nil()) -> nil() } Obligation: innermost runtime complexity Answer: YES(O(1),O(n^1)) The following weak DPs constitute a sub-graph of the DG that is closed under successors. The DPs are removed. { append#1^#(nil(), @l2) -> c_3() , appendAll#1^#(nil()) -> c_6() , appendAll2#1^#(nil()) -> c_9() , appendAll3#1^#(nil()) -> c_12() } We are left with following problem, upon which TcT provides the certificate YES(O(1),O(n^1)). Strict DPs: { append^#(@l1, @l2) -> c_1(append#1^#(@l1, @l2)) , append#1^#(::(@x, @xs), @l2) -> c_2(append^#(@xs, @l2)) , appendAll^#(@l) -> c_4(appendAll#1^#(@l)) , appendAll#1^#(::(@l1, @ls)) -> c_5(append^#(@l1, appendAll(@ls)), appendAll^#(@ls)) , appendAll2^#(@l) -> c_7(appendAll2#1^#(@l)) , appendAll2#1^#(::(@l1, @ls)) -> c_8(append^#(appendAll(@l1), appendAll2(@ls)), appendAll^#(@l1), appendAll2^#(@ls)) , appendAll3^#(@l) -> c_10(appendAll3#1^#(@l)) , appendAll3#1^#(::(@l1, @ls)) -> c_11(append^#(appendAll2(@l1), appendAll3(@ls)), appendAll2^#(@l1), appendAll3^#(@ls)) } Weak Trs: { append(@l1, @l2) -> append#1(@l1, @l2) , append#1(::(@x, @xs), @l2) -> ::(@x, append(@xs, @l2)) , append#1(nil(), @l2) -> @l2 , appendAll(@l) -> appendAll#1(@l) , appendAll#1(::(@l1, @ls)) -> append(@l1, appendAll(@ls)) , appendAll#1(nil()) -> nil() , appendAll2(@l) -> appendAll2#1(@l) , appendAll2#1(::(@l1, @ls)) -> append(appendAll(@l1), appendAll2(@ls)) , appendAll2#1(nil()) -> nil() , appendAll3(@l) -> appendAll3#1(@l) , appendAll3#1(::(@l1, @ls)) -> append(appendAll2(@l1), appendAll3(@ls)) , appendAll3#1(nil()) -> nil() } Obligation: innermost runtime complexity Answer: YES(O(1),O(n^1)) We use the processor 'matrix interpretation of dimension 2' to orient following rules strictly. DPs: { 2: append#1^#(::(@x, @xs), @l2) -> c_2(append^#(@xs, @l2)) , 6: appendAll2#1^#(::(@l1, @ls)) -> c_8(append^#(appendAll(@l1), appendAll2(@ls)), appendAll^#(@l1), appendAll2^#(@ls)) , 8: appendAll3#1^#(::(@l1, @ls)) -> c_11(append^#(appendAll2(@l1), appendAll3(@ls)), appendAll2^#(@l1), appendAll3^#(@ls)) } Trs: { append#1(::(@x, @xs), @l2) -> ::(@x, append(@xs, @l2)) , appendAll#1(::(@l1, @ls)) -> append(@l1, appendAll(@ls)) , appendAll#1(nil()) -> nil() , appendAll2#1(::(@l1, @ls)) -> append(appendAll(@l1), appendAll2(@ls)) } Sub-proof: ---------- The following argument positions are usable: Uargs(c_1) = {1}, Uargs(c_2) = {1}, Uargs(c_4) = {1}, Uargs(c_5) = {1, 2}, Uargs(c_7) = {1}, Uargs(c_8) = {1, 2, 3}, Uargs(c_10) = {1}, Uargs(c_11) = {1, 2, 3} TcT has computed following constructor-based matrix interpretation satisfying not(EDA) and not(IDA(1)). [append](x1, x2) = [0 2] x1 + [1 0] x2 + [0] [0 1] [0 1] [0] [append#1](x1, x2) = [0 2] x1 + [1 0] x2 + [0] [0 1] [0 1] [0] [::](x1, x2) = [0 2] x1 + [1 0] x2 + [1] [0 1] [0 1] [1] [nil] = [0] [0] [appendAll](x1) = [0 2] x1 + [2] [0 1] [0] [appendAll#1](x1) = [0 2] x1 + [2] [0 1] [0] [appendAll2](x1) = [0 2] x1 + [0] [0 2] [0] [appendAll2#1](x1) = [0 2] x1 + [0] [0 2] [0] [appendAll3](x1) = [0] [0] [appendAll3#1](x1) = [0] [0] [append^#](x1, x2) = [0 1] x1 + [0] [0 0] [0] [c_1](x1) = [1 0] x1 + [0] [0 0] [0] [append#1^#](x1, x2) = [0 1] x1 + [0] [2 2] [0] [c_2](x1) = [1 0] x1 + [0] [0 0] [0] [appendAll^#](x1) = [0 1] x1 + [0] [0 0] [0] [c_4](x1) = [1 2] x1 + [0] [0 1] [0] [appendAll#1^#](x1) = [0 1] x1 + [0] [0 0] [0] [c_5](x1, x2) = [1 0] x1 + [1 0] x2 + [1] [0 0] [0 0] [0] [appendAll2^#](x1) = [0 2] x1 + [0] [0 0] [0] [c_7](x1) = [1 0] x1 + [0] [0 0] [0] [appendAll2#1^#](x1) = [0 2] x1 + [0] [0 0] [2] [c_8](x1, x2, x3) = [1 0] x1 + [1 0] x2 + [1 0] x3 + [0] [0 0] [0 0] [0 0] [0] [appendAll3^#](x1) = [2 2] x1 + [0] [0 0] [0] [c_10](x1) = [1 0] x1 + [0] [0 0] [0] [appendAll3#1^#](x1) = [2 2] x1 + [0] [0 0] [2] [c_11](x1, x2, x3) = [2 0] x1 + [1 0] x2 + [1 0] x3 + [0] [0 0] [0 0] [0 0] [0] This order satisfies following ordering constraints [append(@l1, @l2)] = [0 2] @l1 + [1 0] @l2 + [0] [0 1] [0 1] [0] >= [0 2] @l1 + [1 0] @l2 + [0] [0 1] [0 1] [0] = [append#1(@l1, @l2)] [append#1(::(@x, @xs), @l2)] = [1 0] @l2 + [0 2] @x + [0 2] @xs + [2] [0 1] [0 1] [0 1] [1] > [1 0] @l2 + [0 2] @x + [0 2] @xs + [1] [0 1] [0 1] [0 1] [1] = [::(@x, append(@xs, @l2))] [append#1(nil(), @l2)] = [1 0] @l2 + [0] [0 1] [0] >= [1 0] @l2 + [0] [0 1] [0] = [@l2] [appendAll(@l)] = [0 2] @l + [2] [0 1] [0] >= [0 2] @l + [2] [0 1] [0] = [appendAll#1(@l)] [appendAll#1(::(@l1, @ls))] = [0 2] @l1 + [0 2] @ls + [4] [0 1] [0 1] [1] > [0 2] @l1 + [0 2] @ls + [2] [0 1] [0 1] [0] = [append(@l1, appendAll(@ls))] [appendAll#1(nil())] = [2] [0] > [0] [0] = [nil()] [appendAll2(@l)] = [0 2] @l + [0] [0 2] [0] >= [0 2] @l + [0] [0 2] [0] = [appendAll2#1(@l)] [appendAll2#1(::(@l1, @ls))] = [0 2] @l1 + [0 2] @ls + [2] [0 2] [0 2] [2] > [0 2] @l1 + [0 2] @ls + [0] [0 1] [0 2] [0] = [append(appendAll(@l1), appendAll2(@ls))] [appendAll2#1(nil())] = [0] [0] >= [0] [0] = [nil()] [append^#(@l1, @l2)] = [0 1] @l1 + [0] [0 0] [0] >= [0 1] @l1 + [0] [0 0] [0] = [c_1(append#1^#(@l1, @l2))] [append#1^#(::(@x, @xs), @l2)] = [0 1] @x + [0 1] @xs + [1] [0 6] [2 2] [4] > [0 1] @xs + [0] [0 0] [0] = [c_2(append^#(@xs, @l2))] [appendAll^#(@l)] = [0 1] @l + [0] [0 0] [0] >= [0 1] @l + [0] [0 0] [0] = [c_4(appendAll#1^#(@l))] [appendAll#1^#(::(@l1, @ls))] = [0 1] @l1 + [0 1] @ls + [1] [0 0] [0 0] [0] >= [0 1] @l1 + [0 1] @ls + [1] [0 0] [0 0] [0] = [c_5(append^#(@l1, appendAll(@ls)), appendAll^#(@ls))] [appendAll2^#(@l)] = [0 2] @l + [0] [0 0] [0] >= [0 2] @l + [0] [0 0] [0] = [c_7(appendAll2#1^#(@l))] [appendAll2#1^#(::(@l1, @ls))] = [0 2] @l1 + [0 2] @ls + [2] [0 0] [0 0] [2] > [0 2] @l1 + [0 2] @ls + [0] [0 0] [0 0] [0] = [c_8(append^#(appendAll(@l1), appendAll2(@ls)), appendAll^#(@l1), appendAll2^#(@ls))] [appendAll3^#(@l)] = [2 2] @l + [0] [0 0] [0] >= [2 2] @l + [0] [0 0] [0] = [c_10(appendAll3#1^#(@l))] [appendAll3#1^#(::(@l1, @ls))] = [0 6] @l1 + [2 2] @ls + [4] [0 0] [0 0] [2] > [0 6] @l1 + [2 2] @ls + [0] [0 0] [0 0] [0] = [c_11(append^#(appendAll2(@l1), appendAll3(@ls)), appendAll2^#(@l1), appendAll3^#(@ls))] Consider the set of all dependency pairs DPs: { 1: append^#(@l1, @l2) -> c_1(append#1^#(@l1, @l2)) , 2: append#1^#(::(@x, @xs), @l2) -> c_2(append^#(@xs, @l2)) , 3: appendAll^#(@l) -> c_4(appendAll#1^#(@l)) , 4: appendAll#1^#(::(@l1, @ls)) -> c_5(append^#(@l1, appendAll(@ls)), appendAll^#(@ls)) , 5: appendAll2^#(@l) -> c_7(appendAll2#1^#(@l)) , 6: appendAll2#1^#(::(@l1, @ls)) -> c_8(append^#(appendAll(@l1), appendAll2(@ls)), appendAll^#(@l1), appendAll2^#(@ls)) , 7: appendAll3^#(@l) -> c_10(appendAll3#1^#(@l)) , 8: appendAll3#1^#(::(@l1, @ls)) -> c_11(append^#(appendAll2(@l1), appendAll3(@ls)), appendAll2^#(@l1), appendAll3^#(@ls)) } Processor 'matrix interpretation of dimension 2' induces the complexity certificate YES(?,O(n^1)) on application of dependency pairs {2,6,8}. These cover all (indirect) predecessors of dependency pairs {2,5,6,7,8}, their number of application is equally bounded. The dependency pairs are shifted into the corresponding weak component(s). We are left with following problem, upon which TcT provides the certificate YES(O(1),O(n^1)). Strict DPs: { append^#(@l1, @l2) -> c_1(append#1^#(@l1, @l2)) , appendAll^#(@l) -> c_4(appendAll#1^#(@l)) , appendAll#1^#(::(@l1, @ls)) -> c_5(append^#(@l1, appendAll(@ls)), appendAll^#(@ls)) } Weak DPs: { append#1^#(::(@x, @xs), @l2) -> c_2(append^#(@xs, @l2)) , appendAll2^#(@l) -> c_7(appendAll2#1^#(@l)) , appendAll2#1^#(::(@l1, @ls)) -> c_8(append^#(appendAll(@l1), appendAll2(@ls)), appendAll^#(@l1), appendAll2^#(@ls)) , appendAll3^#(@l) -> c_10(appendAll3#1^#(@l)) , appendAll3#1^#(::(@l1, @ls)) -> c_11(append^#(appendAll2(@l1), appendAll3(@ls)), appendAll2^#(@l1), appendAll3^#(@ls)) } Weak Trs: { append(@l1, @l2) -> append#1(@l1, @l2) , append#1(::(@x, @xs), @l2) -> ::(@x, append(@xs, @l2)) , append#1(nil(), @l2) -> @l2 , appendAll(@l) -> appendAll#1(@l) , appendAll#1(::(@l1, @ls)) -> append(@l1, appendAll(@ls)) , appendAll#1(nil()) -> nil() , appendAll2(@l) -> appendAll2#1(@l) , appendAll2#1(::(@l1, @ls)) -> append(appendAll(@l1), appendAll2(@ls)) , appendAll2#1(nil()) -> nil() , appendAll3(@l) -> appendAll3#1(@l) , appendAll3#1(::(@l1, @ls)) -> append(appendAll2(@l1), appendAll3(@ls)) , appendAll3#1(nil()) -> nil() } Obligation: innermost runtime complexity Answer: YES(O(1),O(n^1)) We use the processor 'matrix interpretation of dimension 2' to orient following rules strictly. DPs: { 3: appendAll#1^#(::(@l1, @ls)) -> c_5(append^#(@l1, appendAll(@ls)), appendAll^#(@ls)) , 4: append#1^#(::(@x, @xs), @l2) -> c_2(append^#(@xs, @l2)) , 6: appendAll2#1^#(::(@l1, @ls)) -> c_8(append^#(appendAll(@l1), appendAll2(@ls)), appendAll^#(@l1), appendAll2^#(@ls)) , 8: appendAll3#1^#(::(@l1, @ls)) -> c_11(append^#(appendAll2(@l1), appendAll3(@ls)), appendAll2^#(@l1), appendAll3^#(@ls)) } Trs: { append#1(::(@x, @xs), @l2) -> ::(@x, append(@xs, @l2)) , append#1(nil(), @l2) -> @l2 , appendAll#1(::(@l1, @ls)) -> append(@l1, appendAll(@ls)) , appendAll2#1(nil()) -> nil() , appendAll3(@l) -> appendAll3#1(@l) } Sub-proof: ---------- The following argument positions are usable: Uargs(c_1) = {1}, Uargs(c_2) = {1}, Uargs(c_4) = {1}, Uargs(c_5) = {1, 2}, Uargs(c_7) = {1}, Uargs(c_8) = {1, 2, 3}, Uargs(c_10) = {1}, Uargs(c_11) = {1, 2, 3} TcT has computed following constructor-based matrix interpretation satisfying not(EDA) and not(IDA(1)). [append](x1, x2) = [0 1] x1 + [1 0] x2 + [2] [0 1] [0 1] [0] [append#1](x1, x2) = [0 1] x1 + [1 0] x2 + [2] [0 1] [0 1] [0] [::](x1, x2) = [0 1] x1 + [1 0] x2 + [0] [0 1] [0 1] [2] [nil] = [0] [0] [appendAll](x1) = [0 2] x1 + [0] [0 1] [0] [appendAll#1](x1) = [0 2] x1 + [0] [0 1] [0] [appendAll2](x1) = [0 1] x1 + [2] [0 1] [0] [appendAll2#1](x1) = [0 1] x1 + [2] [0 1] [0] [appendAll3](x1) = [2] [0] [appendAll3#1](x1) = [0] [0] [append^#](x1, x2) = [0 1] x1 + [0] [0 0] [0] [c_1](x1) = [1 0] x1 + [0] [0 0] [0] [append#1^#](x1, x2) = [0 1] x1 + [0] [0 1] [2] [c_2](x1) = [1 0] x1 + [0] [0 0] [0] [appendAll^#](x1) = [0 1] x1 + [0] [0 0] [0] [c_4](x1) = [1 0] x1 + [0] [0 1] [0] [appendAll#1^#](x1) = [0 1] x1 + [0] [0 0] [0] [c_5](x1, x2) = [1 0] x1 + [1 0] x2 + [0] [0 0] [0 0] [0] [appendAll2^#](x1) = [0 2] x1 + [0] [0 0] [0] [c_7](x1) = [1 0] x1 + [0] [0 1] [0] [appendAll2#1^#](x1) = [0 2] x1 + [0] [0 0] [0] [c_8](x1, x2, x3) = [1 0] x1 + [1 0] x2 + [1 0] x3 + [0] [0 0] [0 0] [0 0] [0] [appendAll3^#](x1) = [2 2] x1 + [1] [0 0] [2] [c_10](x1) = [1 0] x1 + [1] [0 0] [1] [appendAll3#1^#](x1) = [2 2] x1 + [0] [2 2] [0] [c_11](x1, x2, x3) = [2 0] x1 + [1 0] x2 + [1 1] x3 + [0] [0 0] [0 0] [0 0] [0] This order satisfies following ordering constraints [append(@l1, @l2)] = [0 1] @l1 + [1 0] @l2 + [2] [0 1] [0 1] [0] >= [0 1] @l1 + [1 0] @l2 + [2] [0 1] [0 1] [0] = [append#1(@l1, @l2)] [append#1(::(@x, @xs), @l2)] = [1 0] @l2 + [0 1] @x + [0 1] @xs + [4] [0 1] [0 1] [0 1] [2] > [1 0] @l2 + [0 1] @x + [0 1] @xs + [2] [0 1] [0 1] [0 1] [2] = [::(@x, append(@xs, @l2))] [append#1(nil(), @l2)] = [1 0] @l2 + [2] [0 1] [0] > [1 0] @l2 + [0] [0 1] [0] = [@l2] [appendAll(@l)] = [0 2] @l + [0] [0 1] [0] >= [0 2] @l + [0] [0 1] [0] = [appendAll#1(@l)] [appendAll#1(::(@l1, @ls))] = [0 2] @l1 + [0 2] @ls + [4] [0 1] [0 1] [2] > [0 1] @l1 + [0 2] @ls + [2] [0 1] [0 1] [0] = [append(@l1, appendAll(@ls))] [appendAll#1(nil())] = [0] [0] >= [0] [0] = [nil()] [appendAll2(@l)] = [0 1] @l + [2] [0 1] [0] >= [0 1] @l + [2] [0 1] [0] = [appendAll2#1(@l)] [appendAll2#1(::(@l1, @ls))] = [0 1] @l1 + [0 1] @ls + [4] [0 1] [0 1] [2] >= [0 1] @l1 + [0 1] @ls + [4] [0 1] [0 1] [0] = [append(appendAll(@l1), appendAll2(@ls))] [appendAll2#1(nil())] = [2] [0] > [0] [0] = [nil()] [append^#(@l1, @l2)] = [0 1] @l1 + [0] [0 0] [0] >= [0 1] @l1 + [0] [0 0] [0] = [c_1(append#1^#(@l1, @l2))] [append#1^#(::(@x, @xs), @l2)] = [0 1] @x + [0 1] @xs + [2] [0 1] [0 1] [4] > [0 1] @xs + [0] [0 0] [0] = [c_2(append^#(@xs, @l2))] [appendAll^#(@l)] = [0 1] @l + [0] [0 0] [0] >= [0 1] @l + [0] [0 0] [0] = [c_4(appendAll#1^#(@l))] [appendAll#1^#(::(@l1, @ls))] = [0 1] @l1 + [0 1] @ls + [2] [0 0] [0 0] [0] > [0 1] @l1 + [0 1] @ls + [0] [0 0] [0 0] [0] = [c_5(append^#(@l1, appendAll(@ls)), appendAll^#(@ls))] [appendAll2^#(@l)] = [0 2] @l + [0] [0 0] [0] >= [0 2] @l + [0] [0 0] [0] = [c_7(appendAll2#1^#(@l))] [appendAll2#1^#(::(@l1, @ls))] = [0 2] @l1 + [0 2] @ls + [4] [0 0] [0 0] [0] > [0 2] @l1 + [0 2] @ls + [0] [0 0] [0 0] [0] = [c_8(append^#(appendAll(@l1), appendAll2(@ls)), appendAll^#(@l1), appendAll2^#(@ls))] [appendAll3^#(@l)] = [2 2] @l + [1] [0 0] [2] >= [2 2] @l + [1] [0 0] [1] = [c_10(appendAll3#1^#(@l))] [appendAll3#1^#(::(@l1, @ls))] = [0 4] @l1 + [2 2] @ls + [4] [0 4] [2 2] [4] > [0 4] @l1 + [2 2] @ls + [3] [0 0] [0 0] [0] = [c_11(append^#(appendAll2(@l1), appendAll3(@ls)), appendAll2^#(@l1), appendAll3^#(@ls))] Consider the set of all dependency pairs DPs: { 1: append^#(@l1, @l2) -> c_1(append#1^#(@l1, @l2)) , 2: appendAll^#(@l) -> c_4(appendAll#1^#(@l)) , 3: appendAll#1^#(::(@l1, @ls)) -> c_5(append^#(@l1, appendAll(@ls)), appendAll^#(@ls)) , 4: append#1^#(::(@x, @xs), @l2) -> c_2(append^#(@xs, @l2)) , 5: appendAll2^#(@l) -> c_7(appendAll2#1^#(@l)) , 6: appendAll2#1^#(::(@l1, @ls)) -> c_8(append^#(appendAll(@l1), appendAll2(@ls)), appendAll^#(@l1), appendAll2^#(@ls)) , 7: appendAll3^#(@l) -> c_10(appendAll3#1^#(@l)) , 8: appendAll3#1^#(::(@l1, @ls)) -> c_11(append^#(appendAll2(@l1), appendAll3(@ls)), appendAll2^#(@l1), appendAll3^#(@ls)) } Processor 'matrix interpretation of dimension 2' induces the complexity certificate YES(?,O(n^1)) on application of dependency pairs {3,4,6,8}. These cover all (indirect) predecessors of dependency pairs {1,2,3,4,5,6,7,8}, their number of application is equally bounded. The dependency pairs are shifted into the corresponding weak component(s). We apply the transformation 'removetails' on the sub-problem: Weak DPs: { append^#(@l1, @l2) -> c_1(append#1^#(@l1, @l2)) , append#1^#(::(@x, @xs), @l2) -> c_2(append^#(@xs, @l2)) , appendAll^#(@l) -> c_4(appendAll#1^#(@l)) , appendAll#1^#(::(@l1, @ls)) -> c_5(append^#(@l1, appendAll(@ls)), appendAll^#(@ls)) , appendAll2^#(@l) -> c_7(appendAll2#1^#(@l)) , appendAll2#1^#(::(@l1, @ls)) -> c_8(append^#(appendAll(@l1), appendAll2(@ls)), appendAll^#(@l1), appendAll2^#(@ls)) , appendAll3^#(@l) -> c_10(appendAll3#1^#(@l)) , appendAll3#1^#(::(@l1, @ls)) -> c_11(append^#(appendAll2(@l1), appendAll3(@ls)), appendAll2^#(@l1), appendAll3^#(@ls)) } Weak Trs: { append(@l1, @l2) -> append#1(@l1, @l2) , append#1(::(@x, @xs), @l2) -> ::(@x, append(@xs, @l2)) , append#1(nil(), @l2) -> @l2 , appendAll(@l) -> appendAll#1(@l) , appendAll#1(::(@l1, @ls)) -> append(@l1, appendAll(@ls)) , appendAll#1(nil()) -> nil() , appendAll2(@l) -> appendAll2#1(@l) , appendAll2#1(::(@l1, @ls)) -> append(appendAll(@l1), appendAll2(@ls)) , appendAll2#1(nil()) -> nil() , appendAll3(@l) -> appendAll3#1(@l) , appendAll3#1(::(@l1, @ls)) -> append(appendAll2(@l1), appendAll3(@ls)) , appendAll3#1(nil()) -> nil() } StartTerms: basic terms Strategy: innermost The following weak DPs constitute a sub-graph of the DG that is closed under successors. The DPs are removed. { append^#(@l1, @l2) -> c_1(append#1^#(@l1, @l2)) , append#1^#(::(@x, @xs), @l2) -> c_2(append^#(@xs, @l2)) , appendAll^#(@l) -> c_4(appendAll#1^#(@l)) , appendAll#1^#(::(@l1, @ls)) -> c_5(append^#(@l1, appendAll(@ls)), appendAll^#(@ls)) , appendAll2^#(@l) -> c_7(appendAll2#1^#(@l)) , appendAll2#1^#(::(@l1, @ls)) -> c_8(append^#(appendAll(@l1), appendAll2(@ls)), appendAll^#(@l1), appendAll2^#(@ls)) , appendAll3^#(@l) -> c_10(appendAll3#1^#(@l)) , appendAll3#1^#(::(@l1, @ls)) -> c_11(append^#(appendAll2(@l1), appendAll3(@ls)), appendAll2^#(@l1), appendAll3^#(@ls)) } We apply the transformation 'usablerules' on the sub-problem: Weak Trs: { append(@l1, @l2) -> append#1(@l1, @l2) , append#1(::(@x, @xs), @l2) -> ::(@x, append(@xs, @l2)) , append#1(nil(), @l2) -> @l2 , appendAll(@l) -> appendAll#1(@l) , appendAll#1(::(@l1, @ls)) -> append(@l1, appendAll(@ls)) , appendAll#1(nil()) -> nil() , appendAll2(@l) -> appendAll2#1(@l) , appendAll2#1(::(@l1, @ls)) -> append(appendAll(@l1), appendAll2(@ls)) , appendAll2#1(nil()) -> nil() , appendAll3(@l) -> appendAll3#1(@l) , appendAll3#1(::(@l1, @ls)) -> append(appendAll2(@l1), appendAll3(@ls)) , appendAll3#1(nil()) -> nil() } StartTerms: basic terms Strategy: innermost No rule is usable, rules are removed from the input problem. We are left with following problem, upon which TcT provides the certificate YES(O(1),O(1)). Rules: Empty Obligation: innermost runtime complexity Answer: YES(O(1),O(1)) Empty rules are trivially bounded Wall-time: 10.1972s CPU-time: 122.556369s Hurray, we answered YES(O(1),O(n^1))